package com.cjg.array;

import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;

import static java.lang.String.*;

public class listArray {
    public static void main(String[] args) {
//        List<String> strings = Arrays.asList("1", "2", "3");
//        //这里的函数式接口 下次补充
//        strings.forEach(System.out::println);
        //java.util.ConcurrentModificationException 线程修改异常
        // oom内存溢出 staticof 栈溢出

        /**
         * 怎么变成安全
         * 方案一:Vector @since   1.0
         * arraylist  @since   1.2 明知不安全还是出了 说明vector不是替代方案
         * 方案二 : 集合的父类 collections
         * 方案三 :Juc包下类 import java.util.concurrent.CopyOnWriteArrayList;
         * 源码下  private transient volatile Object[] array; 后面更新
         * //copyWrite 写入是复制 cow 优化策略
         * 多个线程 list 读取位list 写入可能会产生覆盖
         * 所有在写入是避免覆盖 造成数据问题
         * 写入时复制 写完后插入
         */
        //为什么用CopyOnWriteArrayList不用Vector ,Vector用synchronized,cp用lock嗦,syn下降效率 但是11 后 cy也是syn🔒

//        List<String> objects = new ArrayList<>();
//     List<String> objects = new Vector<>();
        List<String> objects = new CopyOnWriteArrayList<>();
        for (int i = 0; i <20 ; i++) {

            new Thread(()->{
                objects.add(UUID.randomUUID().toString().substring(0,5));
                System.out.println(objects);
            },String.valueOf(i)).start();
            //查看源码得出 把 数字转化为 10 进制
//            public static String toString(int i) {
//                int size = stringSize(i);
//                if (COMPACT_STRINGS) {
//                    byte[] buf = new byte[size];
//                    getChars(i, size, buf);
//                    return new String(buf, LATIN1);
//                } else {
//                    byte[] buf = new byte[size * 2];
//                    StringUTF16.getChars(i, size, buf);
//                    return new String(buf, UTF16);
//                }
//            }


        }



        }



    }

